package com.xxx.delayjob.wheeltimer;

import io.netty.util.HashedWheelTimer;
import io.netty.util.Timeout;
import io.netty.util.TimerTask;
import io.netty.util.concurrent.DefaultThreadFactory;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.TimeUnit;

/**
 * Netty时间轮
 */
@Slf4j
public class WheelTimerDemo {

    // 创建一个时间轮对象
    private static final HashedWheelTimer wheelTimer = new HashedWheelTimer(
            new DefaultThreadFactory("demo-timer"),  // 线程工厂
            100,    // 时间轮tick大小
            TimeUnit.MILLISECONDS,  // tick单位
            512,    // 每一圈有多少个tick
            true    // 是否开启内存泄漏检查
    );

    public static void main(String[] args) {
        log.info("提交延时任务到时间轮");
        // 延时的时间：10s
        long delayTime = 10L;
        // 提交延时任务到时间轮
        wheelTimer.newTimeout(new TimerTask() {
            @Override
            public void run(Timeout timeout) throws Exception {
                log.info("延时任务被触发");
            }
        }, delayTime, TimeUnit.SECONDS);

    }

}
